package com.wargameproject;

import com.wargameproject.Case;
import com.wargameproject.cartes.Map1;
import com.wargameproject.terrain.*;
import com.wargameproject.unite.Tour;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Vibrator;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TableLayout;
import android.widget.Toast;

public class WarGameProjectActivity extends Activity implements OnClickListener {
	 
	PartieCaptureBase partie = new PartieCaptureBase();
	//Partie partie = new Partie();
	TableLayout grille;
	LinearLayout lignes[] = new LinearLayout[partie.getNbLignes()];
	/*
	 * Test
	 */
	Toast toast;
	int duration = Toast.LENGTH_SHORT;
	CharSequence text;
	Button boutonTest;

	/*
	 * int pour le changement d'activite
	 */
	int requestCode;
	public static final int codeVictoire = 12;

	public void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		/*
		 * Creation du quadrillage
		 */
		grille = (TableLayout) findViewById(R.id.tableLayout);
		/*
		 * Placement des partie.cases
		 */
		for (int i = 0; i < partie.getNbLignes(); i++) {
			lignes[i] = new LinearLayout(this);
			grille.addView(lignes[i]);
			for (int j = 0; j < partie.nbColonnes; j++) {

				partie.cases[i][j] = new Case(this, i, j);

				/*
				 * Map 1 - Mettre dans partie ou dans une nouvelle classe
				 * (nouveau package Map ?)
				 */
				// Map1 map = new Map1(); PACKAGE MAP1
				// map.CreationMap1();
				if (i == 0) {
					if (j == 0) {
						partie.cases[i][j].terrain = new Plaine();
					} else if (j < 2) {
						partie.cases[i][j].terrain = new Plaine();
					} else if (j < 3) {
						partie.cases[i][j].terrain = new Foret();
					} else if (j < 9) {
						partie.cases[i][j].terrain = new Mer();
					} else if (j < 10) {
						partie.cases[i][j].terrain = new Foret();
					} else {
						partie.cases[i][j].terrain = new Mer();
					}
				} else if (i == 1) {
					if (j < 2) {
						partie.cases[i][j].terrain = new Plaine();
					} else if (j < 9) {
						partie.cases[i][j].terrain = new Desert();
					} else {
						partie.cases[i][j].terrain = new Foret();
					}
				} else if (i == 2) {
					if (j == 0) {
						partie.cases[i][j].terrain = new Foret();
					} else if (j < 5) {
						partie.cases[i][j].terrain = new Desert();
					} else if (j < 6) {
						partie.cases[i][j].terrain = new Neige();
					} else if (j < 8) {
						partie.cases[i][j].terrain = new Desert();
					} else if (j < 9) {
						partie.cases[i][j].terrain = new Foret();
					} else if (j < 10) {
						partie.cases[i][j].terrain = new Desert();
					} else {
						partie.cases[i][j].terrain = new Foret();
					}
				} else if (i == 3) {
					if (j < 3) {
						partie.cases[i][j].terrain = new Mer();
					} else if (j < 4) {
						partie.cases[i][j].terrain = new Desert();
					} else if (j < 6) {
						partie.cases[i][j].terrain = new Neige();
					} else if (j < 9) {
						partie.cases[i][j].terrain = new Montagne();
					} else if (j < 10) {
						partie.cases[i][j].terrain = new Desert();
					} else {
						partie.cases[i][j].terrain = new Mer();
					}
				} else if (i == 4) {
					if (j == 0) {
						partie.cases[i][j].terrain = new Mer();
					} else if (j < 3) {
						partie.cases[i][j].terrain = new Desert();
					} else if (j < 5) {
						partie.cases[i][j].terrain = new Neige();
					} else if (j < 8) {
						partie.cases[i][j].terrain = new Montagne();
					} else if (j < 10) {
						partie.cases[i][j].terrain = new Desert();
					} else {
						partie.cases[i][j].terrain = new Mer();
					}
				} else if (i == 5) {
					if (j < 2) {
						partie.cases[i][j].terrain = new Desert();
					} else if (j < 4) {
						partie.cases[i][j].terrain = new Neige();
					} else if (j == 4) {
						partie.cases[i][j].terrain = new Montagne();
					} else if (j == 5) {
						partie.cases[i][j].terrain = new Plaine();
					} else if (j == 6) {
						partie.cases[i][j].terrain = new Montagne();
					} else if (j < 9) {
						partie.cases[i][j].terrain = new Neige();
					} else {
						partie.cases[i][j].terrain = new Desert();
					}
				} else if (i == 6) {
					if (j < 1) {
						partie.cases[i][j].terrain = new Mer();
					} else if (j < 3) {
						partie.cases[i][j].terrain = new Desert();
					} else if (j < 6) {
						partie.cases[i][j].terrain = new Montagne();
					} else if (j < 8) {
						partie.cases[i][j].terrain = new Neige();
					} else if (j < 10) {
						partie.cases[i][j].terrain = new Desert();
					} else {
						partie.cases[i][j].terrain = new Mer();
					}
				} else if (i == 7) {
					if (j < 1) {
						partie.cases[i][j].terrain = new Mer();
					} else if (j < 2) {
						partie.cases[i][j].terrain = new Desert();
					} else if (j < 5) {
						partie.cases[i][j].terrain = new Montagne();
					} else if (j < 7) {
						partie.cases[i][j].terrain = new Neige();
					} else if (j < 8) {
						partie.cases[i][j].terrain = new Desert();
					} else {
						partie.cases[i][j].terrain = new Mer();
					}
				} else if (i == 8) {
					if (j < 1) {
						partie.cases[i][j].terrain = new Foret();
					} else if (j < 2) {
						partie.cases[i][j].terrain = new Desert();
					} else if (j < 3) {
						partie.cases[i][j].terrain = new Foret();
					} else if (j < 5) {
						partie.cases[i][j].terrain = new Desert();
					} else if (j < 6) {
						partie.cases[i][j].terrain = new Neige();
					} else if (j < 10) {
						partie.cases[i][j].terrain = new Desert();
					} else {
						partie.cases[i][j].terrain = new Foret();
					}
				} else if (i == 9) {
					if (j < 2) {
						partie.cases[i][j].terrain = new Foret();
					} else if (j < 10) {
						partie.cases[i][j].terrain = new Desert();
					} else {
						partie.cases[i][j].terrain = new Plaine();
					}
				} else {
					if (j < 1) {
						partie.cases[i][j].terrain = new Mer();
					} else if (j < 3) {
						partie.cases[i][j].terrain = new Foret();
					} else if (j < 7) {
						partie.cases[i][j].terrain = new Mer();
					} else if (j < 8) {
						partie.cases[i][j].terrain = new Mer();
					} else if (j < 9) {
						partie.cases[i][j].terrain = new Foret();
					} else if (j < 10) {
						partie.cases[i][j].terrain = new Plaine();
					} else {
						partie.cases[i][j].terrain = new Plaine();
					}
				}

				partie.cases[i][j].terrain.position = partie.cases[i][j];
				partie.cases[i][j].setOnClickListener(this);
				partie.cases[i][j].setMinimumWidth(75);
				partie.cases[i][j].setMaxWidth(75);
				partie.cases[i][j].setMinimumHeight(75);
				partie.cases[i][j].setMaxHeight(75);
				lignes[i].addView(partie.cases[i][j]);
			}

		}
		/*
		 * Placement des bases arbitrairement
		 */

		// BASE J1
		partie.cases[0][0].base = new BaseHumain(partie.joueur1);
		partie.cases[0][0].base.position = partie.cases[0][0];
		// TOUR J1
		partie.cases[0][1].unite = new Tour(partie.joueur1);
		partie.cases[0][1].unite.position = partie.cases[0][1];
		// BASE NAVAL J1
		partie.cases[0][8].base = new BaseNavaleHumain(partie.joueur1);
		partie.cases[0][8].base.position = partie.cases[0][8];
		// BASE NEUTRE
		partie.cases[5][5].base = new BaseNeutre();
		partie.cases[5][5].base.position = partie.cases[5][5];

		// BASE J2
		partie.cases[partie.getNbLignes() - 1][partie.getNbColonnes() - 1].base = new BaseOrque(
				partie.joueur2);
		partie.cases[partie.getNbLignes() - 1][partie.getNbColonnes() - 1].base.position = partie.cases[partie
				.getNbLignes() - 1][partie.getNbColonnes() - 1];
		// BASE NAVAL J2
		partie.cases[10][7].base = new BaseNavaleOrque(partie.joueur1);
		partie.cases[10][7].base.position = partie.cases[10][7];
		// TOUR J2
		partie.cases[partie.getNbLignes() - 1][partie.getNbColonnes() - 2].unite = new Tour(
				partie.joueur1);
		partie.cases[partie.getNbLignes() - 1][partie.getNbColonnes() - 2].unite.position = partie.cases[partie
				.getNbLignes() - 1][partie.getNbColonnes() - 2];

		/*
		 * Lancement de la game
		 */

		partie.brouillardDeGuerre();
		boutonTest = (Button) findViewById(R.id.fin);
		boutonTest.setOnClickListener(this);
	}

	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		// Fin du tour
		if (resultCode == 100) {

		} else if (resultCode != 0) {
			partie.casePrecedente.base.creerUnite(resultCode);
			partie.casePrecedente.unite.recharger();
		}
	}

	public void onClick(View v) {

		if (v.getId() == R.id.fin) {
			partie.soignerUnites(partie.joueurCourant);
			if (partie.nouveauTour()) {
				Intent intent = new Intent(this, Victoire.class);
				intent.putExtra("codeVictoire", partie.codeVictoire);
				startActivity(intent);
			} else {
				/*
				 * Intent intent = new Intent(this, NouveauTour.class);
				 * startActivityForResult(intent, requestCode);
				 */
			}
		} else {
			Case c = (Case) v;
			if (c.presenceUnite()) { 
				if (partie.clickSurUnite
						&& partie.casePrecedente.unite == c.unite) {
					partie.brouillardDeGuerre(); 

					// _ AFFICHER HP click sur unite _ \\
					text = "HP :" + c.unite.vie;
					Context context1 = getApplicationContext();
					Toast.makeText(context1, text, duration).show();
					// _ HP _ \\
				} else {
					if (c.unite.joueur == partie.joueurCourant) { // Unite
																	// alliee
						partie.casePrecedente = c;
						partie.casePrecedente.unite.casesCliquables();

					} else { // Unit� adverse
						if (partie.clickSurUnite) {
							partie.casePrecedente.unite.attaquer(c.unite);
							
							// vibration
							Vibrator vi = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
							vi.vibrate(500);

							if (c.unite.getClass().getName()
									.equals("com.wargameproject.unite.Tour")) {
								if (c.unite.vie == 0) {
									Intent intentVictoire = new Intent(
											WarGameProjectActivity.this,
											Victoire.class);
									startActivity(intentVictoire);
								}
							}
						}
					}
				}
			} else { // Pas d'Unite sur la case cliquee
				if (c.presenceBase()) { // Base sur la case cliquee
					if (partie.clickSurUnite) {
						partie.casePrecedente.unite.deplacer(c);
					} else {
						if (c.base.joueur == partie.joueurCourant) {
							/*
							 * Change d'activite pour choisir une unite
							 */
							/*
							 * Intent intent = new
							 * Intent(WarGameProjectActivity.this,
							 * MenuCreationUniteHumain.class);
							 * startActivity(intent); partie.
							 * brouillardDeGuerre();
							 */
							partie.casePrecedente = c;

							if (partie.joueurCourant.race == "Humain") {
								if (partie.casePrecedente.base
										.getClass()
										.getName()
										.equals("com.wargameproject.terrain.BaseNeutre")) {
									Intent intent = new Intent(this,
											MenuChoixUniteNeutre.class);
									startActivityForResult(intent, requestCode);
								} else if (partie.casePrecedente.base
										.getClass()
										.getName()
										.equals("com.wargameproject.terrain.BaseHumain")) {
									Intent intent = new Intent(this,
											MenuChoixUniteHumain.class);
									startActivityForResult(intent, requestCode);
								} else if (partie.casePrecedente.base
										.getClass()
										.getName()
										.equals("com.wargameproject.terrain.BaseNavaleHumain")) {
									Intent intent = new Intent(this,
											MenuChoixUniteNavaleHumain.class);
									startActivityForResult(intent, requestCode);
								} else { // ne sait on jamais !
								}
							} else {
								if (partie.casePrecedente.base
										.getClass()
										.getName()
										.equals("com.wargameproject.terrain.BaseNeutre")) {
									Intent intent = new Intent(this,
											MenuChoixUniteNeutre.class);
									startActivityForResult(intent, requestCode);
								} else if (partie.casePrecedente.base
										.getClass()
										.getName()
										.equals("com.wargameproject.terrain.BaseOrque")) {
									Intent intent = new Intent(this,
											MenuChoixUniteOrque.class);
									startActivityForResult(intent, requestCode);
								} else if (partie.casePrecedente.base
										.getClass()
										.getName()
										.equals("com.wargameproject.terrain.BaseNavaleOrque")) {
									Intent intent = new Intent(this,
											MenuChoixUniteNavaleOrque.class);
									startActivityForResult(intent, requestCode);
								} else { // ne sait on jamais !
								}
							}

						}
					}
				} else { // Pas d'Unite ni de Base sur la case cliquee
					if (partie.clickSurUnite) {
						partie.casePrecedente.unite.deplacer(c);
						System.err.println("Menu !");
					}
				}
			}
		}
	}
}